package org.seckill.service;

import java.util.List;
import java.util.Map;

import org.seckill.dto.Exposer;
import org.seckill.dto.SeckillExcution;
import org.seckill.entity.Seckill;
import org.seckill.exception.RepeatKillException;
import org.seckill.exception.SeckillCloseException;
import org.seckill.exception.SeckillException;

/**
 * 业务接口：站在“使用者”的角度设计接口
 * 三个方面：
 *  1、方法定义粒度 2、参数明确 3、返回类型（return类型/异常）
 * @author spoplar
 *
 */

public interface SeckillService {
	/**
	 * 秒杀列表
	 * @return
	 */
	List<Seckill> getSeckillList();
	/**
	 * 查询单个秒杀记录
	 * @param seckillId
	 * @return
	 */
	Seckill getById(long seckillId);
	
	/**
	 * 秒杀开启：输出秒杀接口地址
	 * 秒杀未开启：输出系统时间和秒杀时间
	 * @param seckilled
	 * 如果输出一个Entity是不合适的，所以要建一个dto
	 */
	Exposer exportSeckillUrl(long seckilled);
	/**
	 * 执行秒杀操作
	 * @param seckillId
	 * @param userPhone
	 * @param md5
	 */
	SeckillExcution executeSeckill(long seckillId,long userPhone,String md5)
	     throws SeckillException,RepeatKillException,SeckillCloseException;
	/**
	 * 执行秒杀操作
	 * @param seckillId
	 * @param userPhone
	 * @param md5
	 */
	SeckillExcution executeSeckillByProc(long seckillId,long userPhone,String md5)
	     throws SeckillException,RepeatKillException,SeckillCloseException;
}


